package com.lw.sbdemo2.common.base;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Service层基类
 * 适合单表的通用增删改查操作
 *
 * @author LinWang
 * @createTime 2017-3-3
 */
@Transactional(rollbackFor = Exception.class)
public class CrudService<T, D extends BaseMapper<T>> extends BaseService {

    @Autowired
    protected D dao;

    /**
     * 查询
     *
     * @param id id
     * @return 单条记录
     */
    public T getById(String id) {
        return dao.getById(id);
    }

    /**
     * 查询
     *
     * @param entity 实体
     * @return 单条记录
     */
    public T get(T entity) {
        return dao.get(entity);
    }

    /**
     * 查询列表
     *
     * @param entity 实体
     * @return 列表
     */
    public List<T> findList(T entity) {
        return dao.findList(entity);
    }

    /**
     * 查询列表
     *
     * @param id 实体
     * @return 列表
     */
    public List<T> findListById(String id) throws Exception {
        return dao.findListById(id);
    }

    /**
     * 查询所有数据列表
     *
     * @param entity 实体
     * @return 列表
     */
    public List<T> findAllList(T entity) throws Exception {
        return dao.findAllList(entity);
    }

    /**
     * 插入
     *
     * @param entity 实体
     * @return 返回插入记录数
     */
    public int insert(T entity) {
        return dao.insert(entity);
    }

    /**
     * 批量插入
     *
     * @param entityList 实体集合
     * @return 返回插入记录数
     */
    public int insertBatch(List<T> entityList) throws Exception {
        return dao.insertBatch(entityList);
    }

    /**
     * 更新
     *
     * @param entity 实体
     * @return 返回更新记录数
     */
    public int update(T entity) {
        return dao.update(entity);
    }

    /**
     * 批量更新
     *
     * @param entityList 实体集合
     * @return 返回更新记录数
     */
    public int updateBatch(List<T> entityList) throws Exception {
        return dao.updateBatch(entityList);
    }

    /**
     * 物理删除
     *
     * @param entity 实体
     * @return 返回删除记录数
     */
    public int delete(T entity) {
        return dao.delete(entity);
    }

    /**
     * 批量物理删除(集合)
     *
     * @param list 集合
     * @return 返回删除记录数
     */
    @SuppressWarnings("rawtypes")
    public int deleteBatchByList(List list) throws Exception {
        return dao.deleteBatchByList(list);
    }

    /**
     * 批量物理删除(数组)
     *
     * @param ids 数组
     * @return 返回删除记录数
     */
    public int deleteBatchByString(String[] ids) throws Exception {
        return dao.deleteBatchByString(ids);
    }

    /**
     * 更新有效标志（逻辑删除）
     *
     * @param entity 实体 必须传入 validFlag
     * @return 返回更新记录数
     */
    public int updateValidFlag(T entity) {
        return dao.updateValidFlag(entity);
    }
}
